package com.nextel.project.pedido.bean;

import com.nextel.project.Configuracion;
import pe.com.nextel.rms.DataInputStreamX;
import pe.com.nextel.rms.DataOutputStreamX;
import pe.com.nextel.rms.PersistenteX;
import java.io.IOException;
import org.kxml2.io.KXmlParser;
import org.kxml2.io.KXmlSerializer;
import pe.com.nextel.util.ArrayList;
import pe.com.nextel.util.Iterator;
import pe.com.nextel.util.List;
import pe.com.nextel.util.StringUtils;
import pe.com.nextel.util.math.MathUtil;

/**
 *
 * @author eespinoza
 */
public class PedidoDetalleBean extends PersistenteX {

//    private String empresa;
    private String codigoArticulo;
    private String nombreArticulo;
    private String stockArticulo;
    private String stockArticuloDB;
    private String cantidad = "";
    //private PrecioBean precio;
    private String monto;
    private String codigoPrecio;
    private String precioBase;
    private String unidadVenta;
    private String descuento = "";

    public PedidoDetalleBean() {
        // precio = new PrecioBean();
    }

    /**
     * Realiza el calculo del precio
     */
    public void calcularMontoTotal() {
//        System.out.println("calculando monto");

        if (!(Configuracion.SimboloDecimal).equals(cantidad)) {
            monto = MathUtil.multiplicar(precioBase, cantidad);

            if (!(Configuracion.SimboloDecimal).equals(descuento) && MathUtil.esMayor(descuento, "0")) {
                monto = MathUtil.restar(monto, MathUtil.dividir(MathUtil.multiplicar(descuento, monto), "100"));
            }
        }
    }
    
    public void setDescuento(String valor){
        
        if(!(Configuracion.SimboloDecimal).equals(valor)){
            this.descuento = valor;
        }
        
    }

    public String getDescuento(){
        return this.descuento;
    }
    /*
    public void obtenerPrecio(ArticuloBean articulo, PedidoBean pedido) {
    PrecioBean precio = articulo.getPrecio(pedido.getCodigoListaPrecio());
    if (precio != null) {
    codigoPrecio = precio.getCodigoPrecio();
    precioBase = precio.getPrecioBase();
    unidadVenta = precio.getUnidadVenta();
    }
    }
     */
    public void persistir(DataOutputStreamX dataOutput, List list) throws IOException {
        //System.out.println("PedidoDetalleBean.persistir");
        dataOutput.writeInt(list.size());
        //System.out.println("cantidad="+list.size( ));

        for (Iterator it = list.iterator(); it.hasNext();) {
            PedidoDetalleBean bean = (PedidoDetalleBean) it.next();
            bean.persistirItem(dataOutput);
        }
    }

    public void persistirItem(DataOutputStreamX dataOutput) throws IOException {

//        dataOutput.writeString(StringUtils.stringNullToBlank(empresa));
        dataOutput.writeString(StringUtils.stringNullToBlank(codigoArticulo));
        dataOutput.writeString(StringUtils.stringNullToBlank(nombreArticulo));
        dataOutput.writeString(StringUtils.stringNullToBlank(cantidad));
        dataOutput.writeString(StringUtils.stringNullToBlank(precioBase));

        dataOutput.writeString(StringUtils.stringNullToBlank(monto));
        dataOutput.writeString(StringUtils.stringNullToBlank(stockArticulo));
        dataOutput.writeString(StringUtils.stringNullToBlank(descuento));


        /*
        System.out.println("//////////////////////////////////////////////");
        
        System.out.println("detallito.Cantidad  ="+(cantidad));
        System.out.println("detallito.IdLista ="+(codigoPrecio));
        System.out.println("detallito.IdUniventa ="+(unidadVenta));
        System.out.println("detallito.Precio ="+(precioBase));
        System.out.println("detallito.Total ="+(monto));
        System.out.println("detallito.CodProducto ="+(codigoArticulo));
        
        System.out.println("detallito.NomArticulo ="+(getNombreArticulo()));
        System.out.println("detallito.StockArticulo ="+(getStockArticulo()));
        System.out.println("detallito.StockArticuloDB ="+(getStockArticuloDB()));
        
        System.out.println("//////////////////////////////////////////////");
         */
    }

    public List recuperar(DataInputStreamX dataInput) throws IOException {

        List lista = new ArrayList();

        PedidoDetalleBean bean = null;

        int cant = dataInput.readInt();


        for (int i = 0; i < cant; i++) {

            bean = new PedidoDetalleBean();

            bean.recuperarItem(dataInput);

            lista.add(bean);
        }

        return lista;
    }

    public void recuperarItem(DataInputStreamX dataInput) throws IOException {

//        empresa = dataInput.readString();
        codigoArticulo = dataInput.readString();
        nombreArticulo = dataInput.readString();
        cantidad = dataInput.readString();
        precioBase = dataInput.readString();

        monto = dataInput.readString();
        stockArticulo = dataInput.readString();
        descuento = dataInput.readString();

    }

    public String getMonto() {
        return monto;
    }

    public void setMonto(String monto) {
        this.monto = monto;
    }

    public String getCantidad() {
        return cantidad;
    }

    public void setCantidad(String cantidad) {
        // si es diferente
        if(!(Configuracion.SimboloDecimal).equals(cantidad))
            this.cantidad = cantidad;
        
    }

    public void writeXMLObject(KXmlSerializer writer) throws IOException {

        //#debug
//        System.out.println("PedidoDetalleBean.writeXMLObject");

        writer.startTag(null, "d");
 
        writer.attribute(null, "ca", StringUtils.stringNullToBlank(codigoArticulo));

        writer.attribute(null, "c", StringUtils.stringNullToBlank(getCantidad()));

        writer.attribute(null, "pb", StringUtils.stringNullToBlank(getPrecioBase()));

        writer.attribute(null, "m", StringUtils.stringNullToBlank(getMonto()));

        writer.attribute(null, "sa", StringUtils.stringNullToBlank(getStockArticulo()));

        writer.attribute(null, "ds", StringUtils.stringNullToBlank(descuento));

        writer.endTag(null, "d");
//
    }

    public void readXMLObject(KXmlParser parser) throws IOException {
    }

    public String getCodigoArticulo() {
        return codigoArticulo;
    }

    public void setCodigoArticulo(String particulo) {
        this.codigoArticulo = particulo;
    }

    public void clear() {
    }

    /**
     * @return the nombreArticulo
     */
    public String getNombreArticulo() {
        return nombreArticulo;
    }

    /**
     * @param nombreArticulo the nombreArticulo to set
     */
    public void setNombreArticulo(String nombreArticulo) {
        this.nombreArticulo = nombreArticulo;
    }

    /**
     * @return the stockArticulo
     */
    public String getStockArticulo() {
        return stockArticulo;
    }

    /**
     * @param stockArticulo the stockArticulo to set
     */
    public void setStockArticulo(String stockArticulo) {
        this.stockArticulo = stockArticulo;
    }

    /**
     * @return the codigoPrecio
     */
    public String getCodigoPrecio() {
        return codigoPrecio;
    }

    /**
     * @param codigoPrecio the codigoPrecio to set
     */
    public void setCodigoPrecio(String codigoPrecio) {
        this.codigoPrecio = codigoPrecio;
    }

    /**
     * @return the precioBase
     */
    public String getPrecioBase() {
        return precioBase;
    }

    /**
     * @param precioBase the precioBase to set
     */
    public void setPrecioBase(String precioBase) {
        this.precioBase = precioBase;
    }

    /**
     * @return the unidadVenta
     */
    public String getUnidadVenta() {
        return unidadVenta;
    }

    /**
     * @param unidadVenta the unidadVenta to set
     */
    public void setUnidadVenta(String unidadVenta) {
        this.unidadVenta = unidadVenta;
    }
//    public String getStockArticuloDB() {
//        return stockArticuloDB;
//    }
//
//    public void setStockArticuloDB(String stockArticuloDB) {
//        this.stockArticuloDB = stockArticuloDB;
//    }
//    public String getEmpresa() {
//        return empresa;
//    }
//
//    public void setEmpresa(String empresa) {
//        this.empresa = empresa;
//    }
}
